import axios from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus';
import { store } from '/@/store';
import { Session } from '/@/utils/storage';

const errorCode: any = {
	'401': '认证失败，无法访问系统资源',
	'403': '当前操作没有权限',
	'404': '访问资源不存在',
	default: '系统未知错误,请反馈给管理员',
	'-1': '系统错误',
	'400001': '微信号不合规',
	'400002': '微信号需要实名认证',
	'400003': '添加角色达到上限',
	'400004': ' 重复添加角色',
	'400005': '主播角色删除失败，该主播存在未开播的直播间',
	'1': '未创建直播间',
	'1003': '商品id不存在',
	'47001': '入参格式不符合规范',
	'200002': '入参错误',
	'300001': '禁止创建/更新商品 或 禁止编辑&更新房间',
	'300002': '名称长度不符合规则',
	'300006': '图片上传失败（如:mediaID过期）',
	'300007': '线上小程序版本不存在该链接',
	'300008': '添加商品失败',
	'300009': '商品审核撤回失败',
	'300010': '商品审核状态不对（如：商品审核中）',
	'300011': '操作非法（API不允许操作非API创建的商品）',
	'300012': '没有提审额度（每天500次提审额度）',
	'300013': '提审失败',
	'300014': '审核中，无法删除（非零代表失败）',
	'300017': '商品未提审',
	'300018': '商品图片尺寸过大',
	'300021': '商品添加成功，审核失败',
	'300022': '此房间号不存在',
	'300023': '房间状态 拦截（当前房间状态不允许此操作）',
	'300024': '商品不存在',
	'300025': '商品审核未通过',
	'300026': '房间商品数量已经满额',
	'300027': '导入商品失败',
	'300028': '房间名称违规',
	'300029': '主播昵称违规',
	'300030': '主播微信号不合法',
	'300031': '直播间封面图不合规',
	'300032': '直播间分享图违规',
	'300033': '添加商品超过直播间上限',
	'300034': '主播微信昵称长度不符合要求',
	'300035': '主播微信号不存在',
	'300036': '主播微信号未实名认证',
	'300037': '购物直播频道封面图不合规',
	'300038': '未在小程序管理后台配置客服',
	'300039': '主播副号微信号不合法',
	'300040': '名称含有非限定字符（含有特殊字符）',
	'300041': '创建者微信号不合法',
	'300042': '推流中禁止编辑房间',
	'300043': '每天只允许一场直播开启关注',
	'300044': '商品没有讲解视频',
	'300045': '讲解视频未生成',
	'300046': '讲解视频生成失败',
	'300047': '已有商品正在推送，请稍后再试',
	'300048': '拉取商品列表失败',
	'300049': '商品推送过程中不允许上下架',
	'300050': '排序商品列表为空',
	'300051': '解析JSON出错',
	'300052': '已下架的商品无法推送',
	'300053': '直播间未添加此商品',
	'500001': '副号不合规',
	'500002': '副号未实名',
	'500003': '已经设置过副号了，不能重复设置',
	'500004': '不能设置重复的副号',
	'500005': '副号不能和主号重复',
	'600001': '用户已被添加为小助手',
	'600002': '找不到用户',
	'9410000': '直播间列表为空',
	'9410001': '获取房间失败',
	'9410002': '获取商品失败',
	'9410003': '获取回放失败',
};

// 配置新建一个 axios 实例
const service = axios.create({
	baseURL: import.meta.env.VITE_API_URL as any,
	timeout: 50000,
	headers: { 'Content-Type': 'application/json' },
});

// 添加请求拦截器
service.interceptors.request.use(
	(config: any) => {
		console.log('store', store.state);

		// 在发送请求之前做些什么 token
		if (Session.get('token')) {
			config.headers.common['token'] = `${Session.get('token')}`;
		}
		return config;
	},
	(error) => {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

// 添加响应拦截器
service.interceptors.response.use(
	(response) => {
		console.log('response', response);
		let code: any = '';
		code = Number(response.headers.code) || response.status;
		const msg = errorCode[code] || response.data.msg || response.data.data.data.returnMsg || errorCode['default'];
		// 对响应数据做点什么
		if (code !== 10000 && code !== 200) {
			// `token` 过期或者账号已在别处登录
			if (code === 10002) {
				Session.clear(); // 清除浏览器全部临时缓存
				window.location.href = '/'; // 去登录页
				ElMessageBox.alert('你已被登出，请重新登录', '提示', {})
					.then(() => {})
					.catch(() => {});
			} else {
				ElMessage.error(msg);
			}
			return Promise.reject(service.interceptors.response);
		} else {
			return response.data;
		}
	},
	(error) => {
		// 对响应错误做点什么
		if (error.message.indexOf('timeout') != -1) {
			ElMessage.error('网络超时');
		} else if (error.message == 'Network Error') {
			ElMessage.error('网络连接错误');
		} else {
			if (error.response.data) ElMessage.error(error.response.statusText);
			else ElMessage.error('接口路径找不到');
		}
		return Promise.reject(error);
	}
);

// 导出 axios 实例
export default service;
